#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#include <unordered_map>
typedef long long ll;
using namespace std;

//int t, n;
//string s;

//void solve() {
//	cin >> n >> s;
//	char tmp = '0';
//	int ans=0;
//	for (int i = 0; i < n; i++) {
//		if (s[i] != tmp) {
//			ans++;
//			tmp = s[i];
//		}
//	}
//	cout << ans << '\n';
//	return;
//}


//int t, n;
//int a[200005];
//int b[200005];
//int lt, rt;
//
//void solve() {
//	cin >> n;
//	for (int i = 1; i <= n; i++) {
//		b[i] = 0;
//	}
//	for (int i = 1; i <= n; i++) {
//		cin >> a[i];
//		b[a[i]]++;
//	}
//	if (n == 1) {
//		cout << 1 << ' ' << 1 << '\n';
//		return;
//	}
//	int maxn = 0;
//	bool flag = false;
//	for (int l = 1, r = 1; r <= n; r++) {
//		while (l == r && b[a[r]] >= 2) {
//			l++;
//			r++;
//		}
//		if (b[a[r]] >= 2) {
//			if (r - l > maxn) {
//				maxn = r - l;
//				flag = true;
//				lt = l;
//				rt = r - 1;
//			}
//			while (l != r) {
//				l++;
//			}
//			r--;
//		}
//		if (r == n) {
//			if (r - l + 1 > maxn) {
//				flag = true;
//				lt = l;
//				rt = r;
//			}
//		}
//	}
//	if (flag) {
//		cout << lt << ' ' << rt << '\n';
//	}
//	else
//		cout << 0 << '\n';
//	return;
//}

//int t, n;
//int a[200005];
//int dp[200005];
//
//void solve() {
//	cin >> n;
//	for (int i	= 1; i <= n; i++) {
//		dp[i] = 0;
//		cin >> a[i];
//	}
//	dp[n] = a[n];
//	for (int l = n-1; l >= 1; l++) {
//		for (int r = l + 1; r <= n; r++) {
//			dp[r]=max(dp[r],dp[])
//		}
//	}
//}
//
//
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> t;
//	while (t--) {
//		solve();
//	}
//
//	return 0;
//}



//class Solution {
//public:
//    struct node {
//        int val;
//        ListNode* p;
//        bool operator<(const node& x)const {
//            return x.val < val;
//        }
//    };
//
//    priority_queue<node> q;
//
//    ListNode* mergeKLists(vector<ListNode*>& lists) {
//        for (auto x : lists) {
//            if (x) q.push({ x->val,x });
//        }
//        ListNode head, * tail = &head;
//        while (!q.empty()) {
//            auto f = q.top(); q.pop();
//            tail->next = f.p;
//            tail = tail->next;
//            if (f.p->next) q.push({ f.p->next->val,f.p->next });
//        }
//        return head.next;
//    }
//};

//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	priority_queue<node*, vector<node*>, cmp> q;
//
//	return 0;
//}

int t, n;
int a[200005];
ll pre[200005], suf[200005];
ll ans = 0;

void solve() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		pre[i] = suf[i] = 0;
	}
	ans = 0;
	suf[n + 1] = 0;
	for (int i = 1; i <= n; i++) {
		if (a[i] > 0)
			pre[i] = pre[i - 1] + a[i];
		else
			pre[i] = pre[i - 1];
		if (a[n - i + 1] < 0)
			suf[n - i + 1] = suf[n - i + 2] - a[n - i + 1];
		else
			suf[n - i + 1] = suf[n - i + 2];
	}
	for (int i = 1; i <= n+1; i++) {
		ans = max(ans, pre[i - 1] + suf[i]);
	}
	cout << ans << '\n';

}

int main() {
	cin >> t;
	while (t--) {
		solve();
	}
}